package eva.savant.business.administrador.view

import eva.savant.core.view.Bean
import eva.savant.businessobject.ad.Rol
import eva.savant.businessobject.ad.Usuario
import eva.savant.businessobject.ad.UsuarioRol
import eva.savant.businessobject.gl.Persona

import javax.faces.bean.ManagedBean
import javax.faces.bean.SessionScoped
import javax.annotation.PostConstruct
import javax.faces.convert.Converter
import org.primefaces.event.SelectEvent

@SessionScoped
@ManagedBean(name = 'IMUsuario')
public class IMUsuario extends Bean {

  def rol, lsRol

  @PostConstruct
  public void cleanEntity() {

    rol= new Rol()

    entity= new Usuario()

    entity.alta= new Date()

    entity.passAlta= new Date()

    entity.passBitacora= ''

    entity.passIntentos=  0

    entity.persona= new Persona()

    lsEntity= new ArrayList<Usuario>()

    lsRol= find(Rol.class,'sistema.id=?',sistema.id)
  }

  public List findLsEntity() {

    return find(UsuarioRol.class,'usuario : rol.sistema.id=?',sistema.id)
  }

  public boolean mergeEntity(Object entity) {

    entity = merge(entity)

    def usrRol= get(UsuarioRol.class,'usuario.id=? and rol.sistema.id=?',entity.id,sistema.id)

    if(usrRol != null) { usrRol.operacionId= BAJA; merge(usrRol) }

    merge(new UsuarioRol((Usuario)entity,(Rol)rol,null,null,ALTA,sociedad.id,usuario.id))

    return entity != null
  }

  public void editEntity(Object id) {

    entity= get(Usuario.class,id)

    def usrRol= get(UsuarioRol.class,'usuario.id=? and rol.sistema.id=?',entity.id,sistema.id)

    rol= usrRol != null? usrRol.rol : new Rol()
  }

  public void removeEntity(Object entity) {

    def usrRol= get(UsuarioRol.class,'usuario.id=? and rol.sistema.id=?',entity.id,sistema.id)

    if(usrRol != null) { usrRol.operacionId= BAJA; merge(usrRol) }
  }

  public void selectPersona(SelectEvent event) {

    def user= get(Usuario.class,'persona.id=?',entity.persona.id)

    if(user == null) return

    editEntity(user.id)
  }

  public List complete(String value) { return completeLike(Persona.class,'nombre',value) }

  public Converter getConverter() { return converterLike(Persona.class) }

}
